perm filename SCORE.F4[SCR,LCS] blob sn#307171 filedate 1977-03-30 generic text, type T, neo UTF8
C  THIS PROGRAM IS THE PROPERTY OF LELAND SMITH, PROFESSOR OF MUSIC
C  AT STANFORD UNIVERSITY.  IT MAY NOT BE COPIED OR ALTERED IN ANY
C  WAY WITHOUT WRITTEN PERMISSION OF THE AUTHOR.


C  7/74 **********  SCORE  **********  LELAND SMITH, SEP.1969

C   THIS PROGRAM WRITES NOTE LISTS FOR THE PDP10 SOUND 
C   GENERATION PROGRAM.
C   IF # OF INSTS IS CHANGED, ALSO CHANGE # IN 'INFO'('HELP') FORMAT.
C   LOAD 'S1' WITH S2,S3,SCANZ,RAND AND SPRINT 
C   (AND QUAD AND QUADO WHEN THEY ARE READY) AND
C   IF DESIRED, A SUBROUTINE WITH THE FOLLOWING HEADING:
C	SUBROUTINE SUBR
C	COMMON /INS/ INST(27),BG(60)
C	COMMON P(30),INUM,IPAR,CNT(27),BT,PL(48),IREST,DF,DUR(27)
C   INUM=INST#  IPAR=PARAM#  
C   BT=BASIC TIME P1 WHEN SUBROUTINE IS CALLED
C   IF IREST IS <0, THAT NOTE WILL BE A REST.  
C   INST=INST. NAME,  BG=INSTS' BEGIN TIMES.
C   NOTE #S IN SUBROUTINE: (1-84)  C4=37  FS4=43  C5=49  ETC.
C   F1=86  F15=100 (NO F16!)

	COMMON /Q/ BNW(100),NWZ /INS/INST(27),BG(60) /TYP/SOS,JOUT,
	1 LN,ITYP,TPALN(4),JED
CC 7/74 COLGATE  COMMON/TYP/ IS FOR COLTTY ROUT.
C  SEE LABEL 1774 AND ABOVE RE. BUFFER LIMIT.
	COMMON/VV/LIMIT,V(2000) /A/ROFF(27),NP(27),PCH(27,32),
	1 RDEV(27),IPT(27,31),XT(27),OTH(20,16),SCAL(101)
	1 ,P1(27),JFM(4),COPY(30),IFM(80)
	1 ,FINM(6),TINST(5),ENFI(5),TEDIT(4),INVIS(27)
	DIMENSION LIST(78),JNP(80)
C   WITH VX,IOUT AT 70 AND IFM AT 80 OK FOR ONLY 
C   40 LIT CHARS + 30 PARAMS PER INST.
C   60 BG TIMES AVAILABLE.  FOR INSTS AND INSERTS AND EDITS.
	COMMON P(30),J,L,CNT(27),BT,PL(48),MK,DF,DUR(27)
	1/E/IQ(27),KL,X,ZPAR,KA,LK,NNUM,JJ,JA,ISUB,NFLG,IXX,ISEMI,IQT
	1 ,INP(144),VX(70),ISCA(12),IDAT(11),IAMP,K,KN,M,ML,CODE,IBLA
	COMMON/B/MOT,PR,T5,NINS,I,TP,RA,KZY,NWX,INONLY,MX,
	1 Y,Z,ISLAC,MZ,N,IDALL,JC,JG,RB,IJ,IX,BW,KB,NL,RC,W,
	1 ZZ,CHN,YY 
	1 /D/TF,AMPFAC,OP1,DURX,IXIN,IFLNM
	1  /C/LPAR,IPRN,QX,RETRO,INVRT,ICON,LCNT,
	1 PARENS,JZ,BY,MLX,IZ,ALL,JD,LEND,QTS,ITMP,
	1 LP,ILIT,NLIT,KTMP,IC,RAX,RD,IA
C  /C/=26
	EQUIVALENCE (LIST,IFM(3)),(JNP,INP)
	DATA KZY/27/,ISEMI/';'/,IQT/'"'/,LIMIT/2000/
	1, JFM(3)/','/
C  IAA=A  ID=D  IE=E  IF=F  IEN=N  IPP=P  ISS=S  ITT=T
	DATA IBLA/' '/,IXX/'X'/
	1 ,ISCA/'C','P','D','O','E','F','PLAY;','G','S','A','T','B'/
	1 ,IDAT/'0','1','2','3','4','5','6','7','8','9','.'/
	LPAR=0
	IPRN=0
	QX=0.
	MOT=0
	RETRO=-1.
	INVRT=-1
	ICON=-1
	LCNT=1
	PARENS=0
      JZ=1  
	CALL RNDINT
C  INIT RAND NUM GENERATOR.
CC    PR=0  
	IAMP=0
C  IAMP IS 'BLANK LINE'FLAG ON PP1-3.
      T5=0  
      NINS=0
	K=0
	IDALL=-1
	QTS=-1.
      KB=0  
      NWZ=1
	BNW(1)=0
	I=1
      KL=0  
      TP=0  
      RA=0  
      CHN=0 
	DO 127 K=1,77,3
127	LIST(K)=0
C  INITIALIZES MOTIVIC LIST FOR ERROR FINDING ROUTINE.
	NWX=0
	BY=-1
      DO 1128 K=1,KZY     
	INVIS(K)=0
	INST(K)=0
	CNT(K)=0
	RDEV(K)=0
C  RDEV IS FOR RAND DEVIATIONS AT RUN TIME
	NP(K)=0
	IQ(K)=0
C   IQ IS FOR RESTART FLAG
	IPT(K,1)=0
      DO 1128 L=1,32    
1128   PCH(K,L)=0 

	ITYP=-1
C   TYPE 'FILE NAME', TEMPO FACTOR(0=1), AMPL.FACT(0=1),
C   SECONDS TO BE OMITTED, DUR AT CUTOFF.
	JED=-1
2112	TYPE 8002
1112	ACCEPT 77732,JNP
	JFM(4)='5F)'
	JFM(1)='   (A'
C   FOR FREE 'A' FORMAT
	CALL FMT(JFM,JNP,MLX)
	REREAD JFM,K,TF,AMPFAC,OP1,DURX
C  JFM IS THE CURRENT FORMAT STATEMENT
	IF(K.NE.'EDIT')GO TO 3112
	JED=0
	GO TO 2112
C  'E(DIT)' GOES TO EDIT MODE
3112	IF(TF.EQ.0)TF=1.
	IF(AMPFAC.EQ.0)AMPFAC=1.
21122	IF(K.NE.'TYPE')GO TO 128
	ITYP=0
	DATA FINM/30H(' TYPE OUTPUT FILE NAME'/)   /
	IFLNM='FOR21'
	REWIND 21
	GO TO 3127
8001	FORMAT(A5,5F)
77732	FORMAT(80A1)
300	FORMAT(I,3F)
128	IF(K.EQ.'INFO')GO TO 1280
	IF(K.NE.'HELP')GO TO 3128
1280	TYPE 8002
	TYPE 1113
	TYPE 118
	TYPE 1114
	TYPE 8002
	GO TO 1112
118	FORMAT(' TO DSK=1, TTY=2, BOTH=0, LPT=22, PROOF=3, DEBUG=4'/)
CC***  TEMPORARY ***8002	FORMAT(' TYPE FILE NAME'/)
8002	FORMAT(' TYPE FILE NAME--  '$)
1113	FORMAT('     NAME  TF  AMPFAC  OMIT"  DUR"'/)
1114	FORMAT(' N1, N2=RAN NUM, N3=0 LISTS INPUT, N4=SINGLE INST.'/
	1 ' IF -- N1=3 DURS ONLY, =4 V ARRAY'/
	1 3X' 27 INSTRUMENTS ARE AVAILABLE'/)

3128	IF(K.NE.IBLA)IFLNM=K
	CALL IFILE(1,IFLNM)
	READ(1,300)LN,IXIN
C  CHECK FOR LINE NUMBERS ONLY.
	REREAD 8001,K
	IF(K.NE.'COMME')GO TO 3000
3001	READ(1,77732)JNP
	IF(JNP(3).NE.ISEMI)GO TO 3001
	GO TO 3127
C  TO READ HEADER OF 'ET' FILES
3000	REWIND 1
	CALL IFILE(1,IFLNM)

CC3127	ISLAC=(IFLNM.AND."003777777777).OR."550000000000
C MAGIC TO CHANGE LFT. LETTER TO Z(INP. ABCDE BECOMES ZBCDE.DAT)
3127	ISLAC=IFLNM
C  NOW USES MY FORNAM SUBROUTINE TO  PUT EXTENSION .SCR ON OUTPUT
5127	TYPE 118
	IF(DURX.EQ.0)DURX=19999.
	IXIN=1
	INONLY=-1
	ACCEPT 300,MX,X,Y,Z
	IF(MX.NE.99)GO TO 6127
	TYPE FINM
	ACCEPT 8001,ISLAC
	GO TO 5127
6127	IF(Z.NE.0)INONLY=Z
	IF(X.NE.0)IXIN=X
C   MX=3 GIVES DURS ONLY
C  TO SUPPRESS LIST OF INPUT DATA, TYPE ANY 3RD NUM. (BUT 9.)
C  (1 1 1 =RECORD,RAN. NUM=1,SUPPRESS INPUT.)
	MZ=0
	JOUT=5
C  5=OUTPUT TO TTY
	SOS=-1.
	IF(Y.NE.0)SOS=0  
C  IF 3RD NUM=0, EDIT FILE WILL PRINT AS IT IS READ.
	IF(MX.NE.22)GO TO 2107
CC	JOUT=3
C DIRECT TO LPT AT COLGATE 6/74
	JOUT=22
	REWIND 22
2107	IF(MX.LE.1)MX=MX-2
	IF(MX.EQ.-2)GO TO 77
	IF(MX.EQ.2)GO TO 77
	IF(MX.NE.22)GO TO 177
77	MZ=-1
177	IF(MX.EQ.4)MZ=-4
      CALL READIT
      END
	SUBROUTINE READIT
	COMMON /Q/ BNW(100),NWZ /INS/INST(27),BG(60) /TYP/SOS,JOUT,
	1 LN,ITYP,TPALN(4),JED
CC 7/74 COLGATE  COMMON/TYP/ IS FOR COLTTY ROUT.
	COMMON/VV/LIMIT, V(1) /A/ ROFF(27),NP(27),PCH(27,32),
	1 RDEV(27),IPT(27,31),XT(27),OTH(20,16),SCAL(101)
	1 ,P1(27),JFM(4),COPY(30),IFM(80)
	0
,FINM(6),TINST(5),ENFI(5),TEDIT(4),INVIS(27)
	DIMENSION IV(1),LIST(78),JNP(80)
C   WITH VX,IOUT AT 70 AND IFM AT 80 OK FOR ONLY 
C   40 LIT CHARS + 30 PARAMS PER INST.
C   60 BG TIMES AVAILABLE.  FOR INSTS AND INSERTS AND EDITS.
	COMMON P(30),J,L,CNT(27),BT,PL(48),MK,DF,DUR(27)
	1/E/IQ(27),KL,X,ZPAR,KA,LK,NNUM,JJ,JA,ISUB,NFLG,IXX,ISEMI,IQT
	1 ,INP(144),VX(70),ISCA(12),IDAT(11),IAMP,K,KN,M,ML,CODE,IBLA
	COMMON/B/MOT,PR,T5,NINS,I,TP,RA,KZY,NWX,INONLY,MX,
	1 Y,Z,ISLAC,MZ,N,IDALL,JC,JG,RB,IJ,IX,BW,KB,NL,RC,W,
	1 ZZ,CHN,YY 
	1 /D/TF,AMPFAC,OP1,DURX,IXIN,IFLNM
	1  /C/LPAR,IPRN,QX,RETRO,INVRT,ICON,LCNT,
	1 PARENS,JZ,BY,MLX,IZ,ALL,JD,LEND,QTS,ITMP,
	1 LP,ILIT,NLIT,KTMP,IC,RAX,RD,IA
C  /C/=26
	EQUIVALENCE (VX1,VX(1)),(JNP,INP1,INP(1)),(IPP,ISCA(2))
	1 ,(ISS,ISCA(9)),(ITT,ISCA(11))
	1 ,(IE,ISCA(5)),(ID,ISCA(3)),(IF,ISCA(6)),(IAA,ISCA(10))
	1 ,(VX2,VX(2)),(VX3,VX(3)),(VX4,VX(4)),(IDOT,IDAT(11))
	1 ,(V,IV),(LIST,IFM(3)),(IG,ISCA(8))
C   *************** READS INPUT  ***********************
	KIMIT=LIMIT-100
C  FOR WARNING ABOUT BUFFER OVERLOAD (LABEL 1774)
2308	IF(ITYP)GO TO 2127
	DATA TINST /25H(' TYPE INST NAME, ETC'/)/,KSLA/'/'/
	1,TEDIT/20H(' RETYPE LINE?'/  )/,IEN/'N'/,ITMPO/'TEMPO'/
23081	TYPE TINST
	ACCEPT 77732,JNP
77732	FORMAT(80A1)
CC	IF(JED)WRITE(21,77732)INP
	IF(JED)CALL COLTTY(JNP,21)
	JFM(4)='80A1)'
C  PUTS ON LPT AND TTY
	GO TO 1074
CC 6/74 COLGATE2127	JREAD=1
CC 6/74 COLGATE 4400	READ(1,77732,END=2337)JNP
2127	IF(READER(JNP))CALL RUNIT
C  READS A LINE.  IF END OF FILE, JUMPS.
CC  SEE END OF PG.6	IF(SOS)WRITE(JOUT,87732)INP
CC 7/74	IF(SOS)CALL COLTTY(JNP,JOUT,3)
CC 6/74  COLGATE 	GO TO(441,442,443,444,445,446)JREAD

441	JFM(4)='80A1)'
	IF(LN.EQ.0)GO TO 1074
CC	REREAD 2114,LN,JNP
C****  READS ONLY FILES WITH LINE NUMBERS!
	JFM(1)=' (I,A'
	CALL FMT(JFM,JNP,MLX)
	REREAD JFM,LN,J,JNP
	GO TO 4127
1074	JFM(1)='   (A'
	CALL FMT(JFM,JNP,MLX)
	REREAD JFM,J,JNP
4127	IF(JED)GO TO 41271
	IF(K.EQ.'Y')GO TO 41271
C  K CHECK IS TO PASS AFTER RETYPING
	TYPE TEDIT
	ACCEPT 77732,K
	IF(K.EQ.'Y')GO TO 23081
	IF(K.EQ.IG)JED=-1


41271	IF(J.EQ.IBLA)GO TO 2308
	MLX=1
	IZ=0
	JA=-1
	ISUB=4
	CALL CLEAN(INP,LEND)
C  CLEANS OUT = AND , AND FINDS LINE LENGTH.
	ALL=1.
	VX1=0
	VX2=0
	VX3=0
	LK=-1
	K=0
	IF(V(I-1).NE.-9900.-BY)GO TO 364
	BY=-1.
	I=I-1
364	DO 361 JD=1,LEND
	N=INP(JD)
	IF(N.NE.'R')GO TO 361
C  LOOKS FOR 'RESTART'
	DO 3611 M=JD,LEND
	KL=INP(M)
	IF(KL.EQ.IBLA)GO TO 3631
	IF(KL.EQ.ISEMI)GO TO 3631
CCZZZ IF(KL.EQ.IBLA.OR.KL.EQ.ISEMI.OR.KL.EQ.KSLA.OR.KL.EQ.',')GO TO 3631
3611	INP(M)=IBLA
C   CHANGES 'RESTART' TO BLANKS
3631	DO 363 N=1,NINS
	IF(J.NE.INST(N))GO TO 363
	IQ(N)=-1
C   SETS RESTART FLAG.  THIS INST WILL NOW APPEAR WITH NEW NUM.
	GO TO 362
363	CONTINUE
361	IF(N.EQ.ISEMI)GO TO 6773
6773	K=K+1
	IF(K.GT.NINS)GO TO 36
	IF(INST(K).NE.J)GO TO 6773
	IF(IQ(K).EQ.-1)GO TO 6773
C   FINDS CORRECT INST NUM.  PASSES RESTARTED INSTS.
	LK=K
	GO TO 1773
36	IF(J.EQ.'RUN;')GO TO 197
	IF(J.NE.'RUN')GO TO 97
197	CALL RUNIT
97	IF(J.EQ.'INSER')GO TO 397
	IF(J.NE.'EDIT')GO TO 297
397	ISUB=6  
297	IF(ISUB.GT.4)GO TO 1773
	IF(J.EQ.ITMPO)GO TO 1773
	IF(J.EQ.'CONDU')GO TO 1773
	IF(J.EQ.'PLAY')GO TO 1773
	IF(J.EQ.'SECTI')GO TO 1081
C******************  ABOVE AND BELOW FOR 'SECTIONS'
	IF(J.EQ.'END')GO TO 1082
	IF(J.EQ.'END S')GO TO 1082
	IF(J.EQ.'FINIS')GO TO 1082
362	LK=NINS+1
	IF(LK.GT.KZY)CALL ERR(LN)
	INST(LK)=J
	IZ=LK
	GO TO 1773

C*********** DOWN TO 8001 FOR 'SECTIONS'
1083	V(I)=-99.
	KL=1
	GO TO 3083
C  READS 'PLAY SECT. N1,N2'
1081	V(I)=-199.
	KL=4
3083	DO 2081 K=KL,72
C******  OR 80 ↑↑↑↑↑↑↑↑↑ ?????
	IF(INP(K).EQ.IBLA)GO TO 2081
	IV(I+1)=INP(K)
	I=I+2
3081	BY=-1.
	GO TO 2308
2081	CONTINUE
C   READS SECTION IDENTIFIER, -199. MARKS BEGINNING
C1082	IF(V(I-1).EQ.-9900.-BY)I=I-1
C********* FEB 15,71
1082	V(I)=-299.
	I=I+1
	GO TO 3081
C   MARKS END OF SECTION
C************************

8001	FORMAT(A5,5F)
107	FORMAT(I,A5,5F)
4	IF(LK.LE.NINS)GO TO 8773
	IF(ALL.GT.0)GO TO 1004
	IF(IDALL.GT.0)GO TO 8773
	BG(LK)=VX1
	IDALL=LK
	GO TO 2004
C 'MOVE' CHANGES IN 'ALINS' CAN'T BE RESET IN INDIV. INSTS.
1004	BG(LK)=VX1
	IF(LK.EQ.IZ)VX1=0
C   MAY 3,71 **** ALL PARAMS WILL BE SET UP AT TIME 0.
C   CHECK EFFECT ON 'MOVE'!
C ******** APR.23, 1971  FIXES BG TIMES IN 'MOVE'?????!!!!!!!
2004	NINS=LK
	IF(VX3.NE.0)VX2=10000.+VX3
	IF(VX2.EQ.0)VX2=-1
	DUR(LK)=VX2
	GO TO 900
C******** ABOVE FOR REST ONLY ENTRIES.  FEB 18,71
8773	IF(VX2.NE.0)VX1=VX1*10000.+VX2
900	IF(VX1.NE.BY)GO TO 497
	IF(J.NE.'PLAY')GO TO 5773
C*********** 'PLAY' IS FOR 'SECTIONS'
497	BY=VX1
C  BY=CURRENT BG TIME.
	V(I)=-9900.-BY
	I=I+1
	IF(NWZ.NE.0)CALL BGSORT(BY)
5773	IF(J.EQ.ITMPO)GO TO 1106
	IF(J.EQ.'CONDU')GO TO 3018
	IF(J.EQ.'PLAY')GO TO 1083
C*********** ABOVE FOR 'SECTIONS'


4773	NW=LPAR
CZZZZZZZ	MLX=ML
	ML=MLX
	IF(I.LT.KIMIT)GO TO 774
	TYPE 107,I
	IF(I.GE.LIMIT)TYPE 1774
1774	FORMAT(/' ******* TOO MUCH INPUT DATA!! *******'/)
774	ALL=1.
	DF=0
	ISUB=1
CXXX	IF(MLX.LT.LEND)GO TO 17732
CXXX THIS LOST ON );Px . . . ;  TAKEN OUT 8/20/76
CXXX	GO TO 7773

CZZZZZZZZZZZZZZZZZZZZZZZZ
1299	IF(MLX.LE.LEND)GO TO 1773
CZZZZZZZZZZZZZZZ .LT. ZZZZZZZZZZZZ


7773	IF(READER(JNP))CALL RUNIT
C  READS A LINE.  IF END OF FILE, JUMPS.
	IF(INP1.EQ.IBLA)GO TO 7773
	IF(JED)GO TO 77733
	TYPE TEDIT
	ACCEPT 77732,K
	IF(K.NE.'Y')GO TO 442
	TYPE TPALN
	ACCEPT 77732,JNP
442	IF(K.EQ.IG)JED=-1
C   DOESN'T WORK FOR EDITS AND INSERTS YET???


77733	MLX=1
C  FOR CONTINUATION LINES.(CAN'T 'CONTINUE' TWICE IN A ROW!!)
C   'LISTS' MUST END WITH ; IN NEW(7/74) VERSION. 
	CALL CLEAN(INP,LEND)
1773	IF(IPRN.EQ.0)GO TO 17732
	L=I-1
	IF(QTS.GE.0)GO TO 597
	IF(V(I-1).EQ.999.)L=L-1
597	IPRN=IPRN-1
	IF(PARENS.EQ.0)GO TO 17733
	PARENS=0
	LIST(LCNT+2)=L
	LCNT=LCNT+3
	IF(IPRN.EQ.0)GO TO 17732
	IPRN=0
17733	LIST(MOT)=L
	MOT=0
C   FOR ERROR TRAP

CC17732	JZ=0
17732	N=0
17731	ML=MLX

C   BIG LOOP -- TO END OF PAGE 1.
	JD=ML
975	N=INP(JD)
	IF(N.EQ.IBLA)GO TO 236
CCZZZ	IF(N.EQ.IBLA.OR.N.EQ.',')GO TO 236
C ((((())))) MAY 13,71 /Z (D4/E/X 2 3)/ CS/ ETC.  CAN USE 26 LABELS.
33611	IF(N.EQ.'(')GO TO 697
	IF(N.NE.')')GO TO 2361
697	INP(JD)=IBLA
	L=JD-1
5113	IF(INP(L).NE.IBLA)GO TO 2113
	L=L-1
	GO TO 5113
2113	IF(N.EQ.')')GO TO 3361
	IF(PARENS.EQ.0)GO TO 1140
	LCNT=LCNT+3
	IF(MOT.NE.0)CALL ERR(3)
	MOT=LCNT-1
1140	DO 11401 JC=1,LCNT-1,3
	IF(INP(L).NE.LIST(JC))GO TO 11401
C  FINDS DUPLICATE IDENTIFIER
	TYPE 11402,INP(L)
	CALL EXIT

11402	FORMAT(' MOTIVIC (',A1,') USED TWICE')
11401	CONTINUE
	LIST(LCNT)=INP(L)
	PARENS=-1.
	INP(L)=IBLA
	LIST(LCNT+1)=I
	GO TO 236
C ''''''' FOR SINGLE QUOTES
3361	IPRN=IPRN+1
	GO TO 236
C  JUMPS BACK INTO QUOTE SECTION
CQ	IF(PARENS.EQ.0)GO TO 2140
CQ	LIST(LCNT+2)=L
CQ	LCNT=LCNT+3
CQ	PARENS=0
CQ	GO TO 33612
CQ2140	LIST(MOT)=L
CQ	GO TO 33612
CQC )))))))))))  LAST ) CAN'T APPEAR AT END OF LINE!!
C @@@@@@@@@@@@ /@Z/DS3/ ETC. 
2361	IF(N.NE.'@')GO TO 5361
	DO 113 L=1,LEND
	K=JD+L
C   K IS USED AT 240!!!
	JG=INP(K)
	IF(JG.NE.'-')GO TO 6113
	RETRO=0
	INP(K)=IBLA
	GO TO 113
6113	IF(JG.NE.'$')GO TO 7113
C  '$' IS FOR INVERSIONS IN 'NOTES'
	INVRT=0
	GO TO 113
7113	IF(JG.NE.IBLA)GO TO 4113
113	CONTINUE
4113	DO 6361 JMOT=1,LCNT,3
	IF(JG.NE.LIST(JMOT))GO TO 6361
	VX1=0
	DO 40 M=JD+2,LEND
	JG=INP(M)
	IF(JG.EQ.IBLA)GO TO 40
CCZZZ	IF(JG.EQ.KSLA.OR.JG.EQ.ISEMI.OR.JG.EQ.'*')GO TO 140
	IF(JG.EQ.KSLA)GO TO 140
	IF(JG.EQ.ISEMI)GO TO 140
	ML=M
	GO TO 240
40	CONTINUE
240	JC=JA
	JA=-1
	INP(K)=IBLA
	CALL SCANR
	JA=JC
140	JC=1
	KN=LIST(JMOT+1)
	M=LIST(JMOT+2)+1
	IF(RETRO)GO TO 640
	JC=M-1
	M=KN-1
	KN=JC
	JC=-1
	RETRO=-1.
640	IF(INVRT)GO TO 940
840	X=V(KN)
	V(I)=X+VX1
C  FINDS CENTER FOR INVERSION (+TRANSP.)
	I=I+1
	KN=KN+JC
	IF(V(KN-JC).NE.85.)GO TO 940
	V(I-1)=85.
	GO TO 840

940	Z=V(KN)
	IF(INVRT.EQ.0)GO TO 440
	IF(VX1.EQ.0)GO TO 540
C  " @Q N "  WHERE N= 1/2 STEPS IN 'NOTES' OR MULT FACTOR IN OTHERS.
	IF(CODE.EQ.-33.)GO TO 440
	V(I)=Z*VX1
	GO TO 7361
440	IF(Z.EQ.85.)GO TO 540
	Y=0
	IF(INVRT.EQ.0)Y=(X-Z)*2.
	V(I)=Z+VX1+Y
	GO TO 7361
540	V(I)=Z
7361	I=I+1
	KN=KN+JC
	IF(KN.NE.M)GO TO 940

	INVRT=-1
	RB=V(I-1)
	DO 8361 L=JD,LEND
	JG=INP(L)
C   PUT IN NOV 25, 72
CCZZZ	IF(JG.EQ.ISEMI)GO TO 93612
	KN=L
	INP(L)=IBLA
	IF(JG.EQ.KSLA)GO TO 9361
	IF(JG.EQ.')')IPRN=IPRN+1
	IF(JG.NE.ISEMI)GO TO 8361
	IAMP=-1
	GO TO 9361
8361	CONTINUE
C  ABOVE 4 LINES PUT IN 8/76. REPLACE C***********  ↓↓

CCZZZ8361	IF(JG.EQ.'*')IAMP=-1
C***********8361	IF(JG.EQ.ISEMI)IAMP=-1
C***********	MLX=LEND
C ↑↑↑↑↑↑↑ 6/75
C************	GO TO 93612

9361	MLX=L+1
	IF(L.GE.LEND)GO TO 93612
C************9361	MLX=L
C************	IF(L.EQ.LEND)GO TO 93612
C ↑↑↑↑↑↑↑ 6/75
C  FIX THIS & =IBLA BY CHNGING DO LOOP TO 'GO TO' AT 6721,2722
	IF(IAMP.NE.0)GO TO 797
	IF(QTS)GO TO 1773
C  GO BACK IF NOT END OF LINE
797	JZ=-1
93612	IF(IAMP.EQ.0)GO TO 93611
C   NOV 25, 72
	IF(QTS)GO TO 3013
	GO TO 2722
C  THESE ARE FOR "LIT" ITEMS
C  *******  DO NOT USE '@-' OR '@$' WITH 'LIT', RLIST OR RNOT****
C  NO $ WITH FUNC.  $ WITH NUMS AND RHY CAN GIVE NEG RESULT -- TRY IT!
CCZZZ93611	IF(JG.EQ.ISEMI)GO TO 7773
93611	IF(KN.EQ.LEND)GO TO 7773
	JZ=0
	IF(IPRN.NE.0)GO TO 1773
C ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑PICKS UP ' @X)/ ' SITUATION.  22/6/73
	GO TO 236
C  LAST TIME FOR QUOTES

C********↑↑ ↑↑ WAS TO 6017  JUNE 10,71
C   JUMPS TO END STRING OF QUOTES
6361	CONTINUE
	CALL ERR(LN)
C @@@@@@@@@@@@@@@@@@@@@@@@@@
5361	IF(N.EQ.'$')CALL ERR(LN)
C  FOUND $  BUT NO @!
	IF(N.NE.ID)GO TO 53611
	IF(ISUB.NE.1)GO TO 53611
	IF(INP(JD+1).NE.IF)GO TO 236
C  JUMP IF NOT DUTY FACTOR
	DF=DF-100.
	GO TO 43615
53611	IF(N.NE.ISS)GO TO 53612
	IF(INP(JD+1).NE.'U')GO TO 53612
	DF=DF-200
C  FOR SUBROUTINE FLAG.  CAN'T CALL SUBR AT SAME TIME AS REP OR X!!!!
	GO TO 43615
53612	IF(N.NE.IAA)GO TO 43611
C   FINDS 'ALL'.
	IF(INP(JD+1).NE.'L')GO TO 236
	ALL=-1.
	GO TO 43615
C  TYPE 'ALL' AFTER PARAM NUM TO PUT DATA IN ALL INSTS.

C  QUAD CALL MUST BE IN 1ST OF 5 PARAMS.  QUAD MUST BE FOLLOWED
C   BY SPC, / OR ;.  OTHER CALLS SUCH AS MOVE,NUM ETC. CAN
C   APPEAR BEFORE  / OR ;, BUT "ALL" MUST! APPEAR 
C   BEFORE! QUAD (IF USED).
C  ADD AN "F" TO QUAD FOR FUNCTIONS, AN "X" FOR X,Y COORDS.
C BASIC QUAD PRODUCES CIRCLES. /DEGS/RADIUS/CENT. X/CENT. Y/
C  QUADX -- /X /Y / (5TH PARAM WILL ALWAYS BE WASTED)
43611	IF(N.NE.'Q')GO TO 4361
	IF(INP(JD+1).NE.'U')GO TO 4361
	QX=-13.
	DO 43612 N=JD,LEND
	J=INP(N)
	IF(J.EQ.IXX)QX=QX-1.
	IF(J.EQ.IF)QX=QX-2.
	IF(J.EQ.IBLA)GO TO 236
	IF(J.EQ.KSLA)GO TO 236
CCZZZ	IF(J.EQ.IBLA.OR.J.EQ.KSLA.OR.J.EQ.ISEMI.OR.J.EQ.',')GO TO 236
43612	INP(N)=IBLA
4361	IF(N.NE.'I')GO TO 43613
	IF(ISUB.NE.4)GO TO 43613
C  -1= 'NM INV' MAKES INST NAME, P1 AND P2 INVISIBLE (REPLACES SEG, ETC.)
C  -2= 'NM IE' MAKES 'END' OF PRINTOUT INVIS. ( ;PRINT(P1)--ETC.)
C  THIS IS SO PARAMS MAY BE EXTENDED TO 58 ON TO A DUMMY INST.
	L=-1
	N=INP(JD+1)
	IF(N.EQ.IE)L=L-1
	INVIS(LK)=L
43615	DO 43614 L=JD,LEND
	N=INP(L)
CC	IF(N.EQ.IBLA.OR.N.EQ.KSLA)GO TO 236
	IF(N.EQ.IBLA)GO TO 236
	IF(N.EQ.ISEMI)GO TO 236
CCZZZ	IF(N.EQ.IBLA.OR.N.EQ.','.OR.N.EQ.ISEMI.OR.N.EQ.KSLA)GO TO 236
43614	INP(L)=IBLA
CC43613	IF(N.NE.KSLA)GO TO 636
43613	IF(N.NE.KSLA)GO TO 1336
CC	JZ=-1
	IF(JD.GE.LEND-1)JZ=0
C  SO IT WILL READ NEXT LINE.
CZZZZZZZZZZZZZZZ	INP(JD)=ISEMI
	GO TO 336
CCZZZ436	IF(INP(MLX).NE.IBLA)GO TO 336
CCZZZ	MLX=MLX+1
CCZZZ	GO TO 436
CC636	IF(JD.LT.LEND)GO TO 1336
CC	ICON=0
CC	GO TO 77731
CC	GO TO 7773
C  TO CONTINUE ON NEXT LINE.
CCZZZ636	IF(N.NE.ISEMI)GO TO 936
1336	IF(N.NE.ISEMI)GO TO 936
	IAMP=-1
CC	IF(ISUB.NE.1)IAMP=-1
336	MLX=JD+1
	IF(ISUB.GE.104)GO TO 104
	IF(ISUB.GT.3)GO TO 1899
   	GO TO (101,102,103),ISUB
C             PAR  MOV LIST  OTHERS
CCZZZ936	IF(N.NE.IDOT)GO TO 736
936	IF(N.NE.IDOT)GO TO 136
	L=INP(JD+1)
	DO 836 KL=1,10
836	IF(L.EQ.IDAT(KL))GO TO 236
	IF(CODE.EQ.-22.)INP(JD)=1
	GO TO 236
C   CHANGES DOTTED RHYTHMS TO '1'S.
CCZZZ736	IF(N.NE.'*')GO TO 136
CCZZZ	IAMP=-1
CCZZZ	INP(JD)=IBLA
CCZZZ	GO TO 336
136	IF(N.NE.IQT)GO TO 236
	DO 1361 K=JD+1,LEND
	IF(INP(K).NE.IQT)GO TO 1361
	JD=K+1
	GO TO 975
C   SKIPS MATERIAL IN QUOTES
1361	CONTINUE
	CALL ERR(LN)
C   OPEN QUOTES
236	JD=JD+1
	IF(JD.LE.LEND)GO TO 975
	CALL ERR(1)
1899	CALL SCANR
CZZZZZZZ	ML=MLX
CZZZZZZZZZZZZZZZZZZZZZZZZZZ
	GO TO(1,2,3,4,5,6),ISUB
101	N=INP(ML)
	IZ=ML
	ML=ML+1
	IF(N.EQ.IBLA)GO TO 101
C ⊗⊗⊗⊗⊗ MAY 13,71 @@@@@@@@@@
	JA=-1
	IF(N.EQ.IPP)GO TO 1
	IF(N.EQ.IE)GO TO 2308
	IF(N.EQ.'R')CALL RUNIT
C   'RUN' MAY REPLACE 'END' FOR LAST INST.
	IF(N.EQ.ID)GO TO 7720
	CALL ERR(LN)
1	CALL SCANR
 	LPAR=VX1
	IJ=LPAR
	IF(QX.GE.0)GO TO 5703
	IJ=LPAR+4
C  SETS UP PARAM FOR QUAD CALL
	V(I)=IJ+LK*10000
	V(I+1)=2*ALL
C  TEST "ALL" FEATURE HERE!!!!!!!
C  X=-13(DEGREES),=-14(X,Y),=-15(CIRCLE FUNCTS),=-16(LINE FUNCTS)
	V(I+2)=QX
	I=I+3
	QX=0.
5703	IAMP=0
	IF(IJ.LE.NP(LK))GO TO 897
	IF(IJ.LT.31)NP(LK)=IJ
897	IF(LPAR.EQ.32)LPAR=1
	V(I)=LPAR+LK*10000
C  +1=WDCNT, +2=CODE, +3='NM' CCCCC
	IJ=I+1
	I=I+4
	ITMP=0
	CODE=0
	NFLG=1
	ML=IZ+M
C   RE=REP  R=RHY  L=LIT  M=MOVE  MX=MOVX  N=NOTES  NU=NUM  
C   S--L=SUBL  S--N=SUBN  T=TAP  RT=RTAP  RL=RLIST  RN=RNOTES
C  QU=QUADC  QUX=QUADX 
5702	ML=ML+1
CC	IF(ML.GT.72)GO TO 99
	N=INP(ML)
	IF(N.EQ.IBLA)GO TO 5702
	IF(N.EQ.',')GO TO 5702
	NL=INP(ML+1)
	JA=-1
	ISUB=0
	IF(N.EQ.IXX)GO TO 2703
	IF(N.EQ.'R')GO TO 6702
	IF(N.EQ.IF)GO TO 8702
	IF(N.EQ.IPP)GO TO 7006
	IF(N.NE.'C')GO TO 4005
	IF(NL.EQ.'U')GO TO 7006
C  FOR 'CUTOFF'
4005	JA=0
	IF(N.EQ.IEN)GO TO 6005
	IF(N.EQ.'M')GO TO 703
	IF(N.EQ.'L')GO TO 2720
	IF(N.EQ.ISS)GO TO 6703
	IF(N.EQ.ITT)GO TO 4018
	IF(N.EQ.IQT)GO TO 5720
	IF(N.EQ.ISEMI)GO TO 2018
C 7/75	IF(N.EQ.IPP)JA=-1
C  FOR ;P5  P3;
7006	CALL SCANR
	IF(ISUB.EQ.8)GO TO 8
	I=I+JJ
	V(IJ+1)=NNUM+DF
	IF(JJ.EQ.1)GO TO 4006
C  IF NNUM IS '-2' THEN NOTES ARE PRINTED
	IF(NNUM.NE.-2)GO TO 5006
	IX=IJ+3
	DO 2006 K=2,JJ,3
2006  CALL RANR(VX,K)
C   FOR RAN. SELEC. OF NOTES.  FINDS HIGHEST NOTE.
5006	IX=IJ+2
	DO 6006 K=1,JJ
6006	V(IX+K)=VX(K)
	IF(NL.EQ.'U')GO TO 8006
	V(IX+JJ-2)=1.
C  ABOVE ENSURES THAT LAST RAND. UNIT REACHES 100% - 5/74 *********
	GO TO 3013
4006	IF(JA)VX1=VX1/100.+9999.
C  CHANGES ;P5 P3; TO ;P5 9999.03; ***** CHECK OUT ON OTHER MACHINES!
	V(I-1)=VX1
	GO TO 3013
8006	V(IJ+1)=-19
C  FOR 'CUTOFF N1, N2' -- TO END RAND TIMES TOGETHER.
	GO TO 3013
6702	IF(NL.EQ.IE)GO TO 2703
C   JUMP IF "REP"
	IF(NL.EQ.ITT)GO TO 4018
C   JUMP IF "RTAP"
	CODE=-22
	IF(NL.EQ.'L')CODE=-46.0
C   JUMP IF "RLIST" (LIST OF RAND SELECTIONS)
	IF(NL.NE.IEN)GO TO 1016
C   JUMP IF NOT "RNOTES"
	JA=0
C   FOR SCANR
	CODE=-36.
	GO TO 1016
6005	CODE=-33
	IF(NL.EQ.'A')GO TO 2720
C  NUMS, NOTES, NAMES.
	IF(NL.NE.'U')GO TO 1016
	CODE=-44.
1610	JA=-1
	GO TO 1016
8702	CODE=-35
	IF(NL.EQ.'U')GO TO 1016
	ML=ML+1
	CALL SCANR
7	V(IJ+1)=CODE+DF
	V(IJ+2)=1.
	IF(VX1.GT.15)CALL ERR(4) 
C TRAPS F NUMS >15.
	V(I)=VX1+85.
	GO TO 7703
C********  MOVE IS NEXT ***********
703	BW=V(IJ-2)
	IC=0
CC	DO 7031 K=ML+1,72
	DO 7031 K=ML+1,LEND
	LP=INP(K)
	IF(LP.EQ.KSLA)GO TO 8031
CC	IF(INP(K).EQ.ISEMI)GO TO 8031
	IF(LP.EQ.IPP)IC=1
C 'MOVP' P7 MOVP/10 3,4.9 5,5.9;MOVES FROM RAN SEL. OF P3,P4 TO P5,P5.
7031	IF(LP.EQ.IXX)IC=-1
C   IC=-1 IS FOR MOVX, IC=0 FOR MOVE, IC=1 FOR MOVP.
8031	I=I-1
	V(I)=0
	X=-9900.-BY
	IF(BY.EQ.0)X=-9900.-BG(LK)
   	IF(BW.EQ.X)GO TO 8005
	IF(BW.NE.-9900.-BY)GO TO 1102
	V(IJ-2)=X
	GO TO 8005
1102	V(IJ)=V(IJ-1)
	V(IJ-1)=X
	IJ=IJ+1
	I=I+1
8005	LP=IJ-1
	BW=-9900.-X
	ISUB=2
	IZ=-1
C  ABOVE ARRANGES NECESSARY BG TIME HEADINGS.
4703	GO TO 1299
102	IF(IZ.LT.0)GO TO 2102
C  SKIPS NEXT FIRST TIME
	BW=V(ICT)+BW
	V(I)=-9900.-BW
	V(I+1)=V(LP)
	V(I+2)=(JJ+2)*ALL
	V(I+3)=CODE+DF
	I=I+4
	IZ=1
2102	IF(BW.LT.10000.)CALL BGSORT(BW)
C   ROUND-OFF NONSENSE
2	VX3=-9900.
	VX2=VX3 
	CALL SCANR
	IF(JJ.GT.0)GO TO 5102
	JJ=ILIT
C SLASH WILL REPEAT MOVE INPUT -- 6/74
	DO 6102 K=1,JJ
6102	VX(K)=VX(K+20)
	GO TO 5005
C::::::::::::::: PUT THIS, AND AT 5505, IN SCOR5 ALSO ::::::::::::::
5102	IF(JJ.EQ.4)CALL ERR(LN)
C  ERROR -- 4 ITEMS IN MOVE IMPOSSIBLE
	IF(VX3.NE.-9900.)GO TO 3102
	IF(VX2.NE.-9900.)GO TO 4102
	VX2=VX1
	VX1=10000.
4102	VX3=VX2
	JJ=3
C  1,2 OR 3 NUMS CAN BE USED IN NON-RAN MOVES.
3102	IF(IZ.GE.0)GO TO 3006
	V(IJ)=(JJ+2)*ALL
C  WORD COUNT
	CODE=-55.
	IF(JJ.NE.3)CODE=-57.
	IF(NFLG)CODE=CODE-1.
	IF(IC)CODE=-59.
C  CODE=-56 OR -58 FOR NOTES.
	V(IJ+1)=CODE+DF
	IZ=0
3006	IF(NFLG.EQ.1)GO TO 5005
	CALL RANR(VX,2)
      IF(JJ.NE.3)CALL RANR(VX,4)
C   FOR RAN. SELEC. OF NOTES.  FINDS HIGHEST NOTE.
5005	IF(IC.LE.0)GO TO 3003
C NEXT FOR 'MOVP',  MOVE FROM PARAM TO PARAM.
	DO 1003 K=2,JJ
1003	VX(K)=VX(K)/100.0+9999.0
C  CHANGES PARAM NUMS TO MAGIC NUMS.
3003	ICT=I
	ILIT=JJ
C  SAVES FOR SLASH REPEAT FEATURE
  	IJ=IJ+1
	DO 1006 K=1,JJ
	VX(20+K)=VX(K)
C  SAVES FOR SLASH REPEAT FEATURE
1006	V(IJ+K)=VX(K)
	I=I+JJ  
	IJ=I+2
	IF(IAMP.EQ.0)GO TO 1299
C*************** MAY 18,71 ***** ALWAYS RESETS TO TIME 0 WHEN MOVE IS USED.
	V(I)=-9900.-BY
	GO TO 8703

7703	V(IJ)=4.*ALL
8703	I=I+1
	GO TO 4773
C   FOR SUBROUTINES, -12=NUMS.  -11=LETTERS.
6703	CODE=-12.
	IF(INP(ML+3).EQ.'L')CODE=-11.
	V(IJ)=2.*ALL
	V(IJ+1)=CODE+DF
	I=I-1
	GO TO 4773
4018	CNT(LK)=-9900.-BY
	P(LK)=V(I-4)
CC 6/74 COLGATE 	JREAD=3
CC 6/74 COLGATE	GO TO 4400
1444	IF(READER(JNP))CALL RUNIT
C  READS A LINE.  IF END OF FILE, JUMPS.
443	IF(LN.NE.0)REREAD 107,K,IPT(LK,1)
	IF(LN.EQ.0)REREAD 8001,IPT(LK,1)
C   NAME OF RHYTHM FILE. (ONLY ONE PER INST.)  READS DATA JUST BEFORE RUN
	IF(J.EQ.'CONDU')GO TO 444
	IF(NL.NE.ITT)GO TO 2338
	CODE=-23.
	GO  TO 1016
2338	I=I-4
	GO TO 4773
3018	CNT(KZY)=-9900.
	GO TO 1444
444	P(KZY)=980000.
	GO TO 2308
C   CAN'T USE 'TAP' OR 'RTAP' WITH INST KZY IF USING 'CONDUCT'.
C  'REP'
2703	ML=ML+1
	VX1=0
	VX2=0
	VX3=0
	IF(N.EQ.IXX)GO TO 2704
	INP(ML)=IBLA
	INP(ML+1)=IBLA
C  WIPES OUT 'EP' IN 'REP'
2704	CALL SCANR
 	V(IJ)=3.
	V(IJ+1)=-66.0
	IF(VX1.EQ.32.)VX1=1.
	IF(VX1.EQ.0)VX1=LPAR
	IF(VX2.EQ.0)VX2=LK-1
	V(IJ+2)=VX1+VX2*10000.
	KL=VX2
	IF(DUR(LK).LT.0)DUR(LK)=DUR(KL)
	IF(VX3.EQ.0)GO TO 4773
	L=VX3
	ML=LK+1
	DO 1018 KL=ML,L
	IF(LPAR.LE.NP(KL))GO TO 997
	IF(LPAR.LT.31)NP(KL)=LPAR
997	IF(DUR(KL))DUR(KL)=DUR(LK)
C  TO SET DUR WHEN DUPLICATING NOTES THAT END WITH 'END;;'
	V(I)=V(I-4)+10000.
	V(I+1)=3.
	V(I+2)=-66.
	V(I+3)=V(I-1)
1018	I=I+4
	GO TO 4773

2018	IF(DF.EQ.0)GO TO 20181
C NEXT FOR Pn SUBR/ I.E. NOTHING BUT P AND SUB CALL. 7/73
	V(IJ+1)=-201.
	V(IJ+2)=1.
	V(IJ+3)=0
	GO TO 7703
20181	V(IJ)=3.
	V(IJ+1)=-66.
	V(IJ+2)=NW+LK*10000
	GO TO 4773
C  READS /P5  .3 "ABC" .7 "XYZ"/

8 	V(IJ+1)=-77.+DF
C  DF HAS SUBR CALL INFO
	I=I+1
	VX(JJ-1)=1
C  FOR RAND. SINGLE LITS.
	DO 3722 K=1,JJ,2
	V(I)=VX(K)
3722	I=I+1
	V(IJ+2)=JJ/2
	V(IJ+3)=I
	DO 4722 K=2,JJ,2
	KN=I
	I=I+1
	L=VX(K)
	DO 6722 KL=L,LEND
	IF(INP(KL).EQ.IQT)GO TO 4722
	IV(I)=INP(KL)
6722	I=I+1
4722	V(KN)=I-KN-1
	V(IJ)=(I-IJ)*ALL
	GO TO 4773
2720	QTS=0
	ISUB=104
	IF(NL.EQ.'A')ISUB=ISUB+1
	GO TO 1299

104	KL=0
	DO 6721 K=ML,LEND
	L=INP(K)
	IF(L.EQ.IBLA)GO TO 6721
	JC=K+1
	IF(L.EQ.IQT)GO TO 7721
	IF(L.EQ.KSLA)GO TO 7232
	IF(L.EQ.ISEMI)GO TO 7232
	IF(L.EQ.'%')INP(K)=KSLA
	IF(L.EQ.'?')INP(K)=ISEMI
	IF(L.EQ.'!')INP(K)=','
	IF(KL.EQ.0)KL=K
6721	CONTINUE
C  FOR REPEAT OF ITEM BY SLASH
C  KL IS START OF QUOTE, THEN K IS END -- WHEN NO "S ARE USED.
7232	IF(KL.EQ.0)GO TO 7233
	JC=KL
	ML=K+1
	JD=K-1
	NLIT=K-KL
	GO TO 8721

7233	DO 7230 KL=ILIT,ILIT+NLIT
	V(I)=V(KL)
7230	I=I+1
	GO TO 27222
7231	CONTINUE

5720	IAMP=-1
	JC=ML+1
C  FOR SINGLE 'LIT' ITEMS.
7721	DO 1722 KL=JC+1,LEND
	IF(INP(KL).NE.IQT)GO TO 1722
	JD=KL-1
	ML=KL+1
	NLIT=KL-JC
C   EXTENT OF LIT ITEM IS FOUND
	GO TO 8721
1722	CONTINUE
C  CAN'T USE SLASH FOR REPEAT AFTER @Q
8721	V(I)=NLIT
	ILIT=I
	DO 9721 K=JC,JD
C   PUTS ITEM IN "IV" ARRAY
	I=I+1
9721	IV(I)=INP(K)
	I=I+1
27222	IF(IAMP.EQ.0)GO TO 1299
2722	V(I)=999.
	QTS=-1.
	X=-88.
	IF(ISUB.EQ.105)X=-89.
C 105, -89. FOR LIST OF NAMES FOR INST. NAME CHNGS.
27221	V(IJ+1)=X+DF
	V(IJ)=(I-IJ+1)*ALL
	IJ=IJ+2
	V(IJ)=IJ+1
	I=I+1
	ISUB=1
	GO TO 1299

7720	V(I)=LK
	V(I+1)=3.
	V(I+2)=-67.
	ML=ML+4
	CALL SCANR
 	V(I+3)=VX1
	I=I+4
	L=VX1
	IF(NP(LK).LT.NP(L))NP(LK)=NP(L)
	IF(DUR(LK).LT.0)DUR(LK)=DUR(L)
	GO TO 4773
C   TYPE 'DUPL N;'   N=INST # TO BE DUPLICATED.
142	FORMAT(I,15A5) 
1301	FORMAT(15A5) 
CCC2773	FORMAT(I,A5,72A1) 
CC2114  FORMAT(I,80A1)
300	FORMAT(I,3F,A1)
301	FORMAT(3F,A1)
6 	KB=KB+1
	IF(JED.GT.0)JED=0
	IF(J.EQ.'INSER')GO TO 1340
      OTH(KB,1)=VX1*100000.+VX2*100.+VX3   
      GO TO 340   
1340	X=VX1
	IF(VX2.NE.0)X=1000000.+VX1*100000.+VX2    
	OTH(KB,1)=X
	GO TO 1338
C   ABOVE IS TO PUT INSERT AFTER NOTE # OF A PARTICULAR
C   INSTRUMENT.  FOR COMMENT AT START, SET BG TIME TO 1,1 
C   - BEGIN LINE WITH  <,END WITH ; 
C   UP TO 75 CHARACTERS MAY BE TYPED.     
340      IF(VX3.NE.2)GO TO 1338 
	IF(ITYP.GE.0)GO TO 449
CC	JREAD=5
CC 6/74  COLGATE	GO TO 4400
	IF(READER(JNP))CALL RUNIT
C  READS A LINE.  IF END OF FILE, JUMPS.
445	OTH(KB,3)=1.
	IF(LN.EQ.0)GO TO 447
	REREAD 300,K,OTH(KB,2)
	GO TO 1447
447	REREAD 301,OTH(KB,2)
1447	IF(JED)GO TO 2308
3445	TYPE TEDIT
	ACCEPT 77732,K
	IF(K.EQ.IG)JED=-1
	IF(J.EQ.'INSER')GO TO 3446
	IF(K.NE.'Y')GO TO 2308
	IF(JED)GO TO 2308
449	TYPE TPALN
	ACCEPT 301,OTH(KB,2)
	IF(JED)WRITE(21,301) OTH(KB,2)
	GO TO 2308

1338	IF(ITYP.GE.0)GO TO 1449
CC	JREAD=6
CC 6/74 COLGATE	GO TO 4400
	IF(READER(JNP))CALL RUNIT
C  READS A LINE.  IF END OF FILE, JUMPS.
446	IF(LN.EQ.0)GO TO 448
	REREAD 142,K,(OTH(KB,JD),JD=2,16)    
	GO TO 1446
448	REREAD 1301,(OTH(KB,JD),JD=2,16)    
1446	IF(JED)2446,3445,2446
3446	IF(K.NE.'Y')GO TO 2446
	IF(JED)GO TO 2446
1449	TYPE TPALN
	ACCEPT 1301,(OTH(KB,JD),JD=2,16)
	IF(JED)WRITE(21,1301)(OTH(KB,JD),JD=2,16)
2446	X=OTH(KB,2)
	IF(J.NE.'INSER')GO TO 971
	IF(VX3.EQ.0)GO TO 971
	IF(X.NE.'*')GO TO 6
971	IF(X.EQ.'*')KB=KB-1
C   ALLOWS SEVERAL LINES OF 'INSERT' IF ANY 3RD #.
C   LAST LINE HAS '*' IN COLUMN 1.
	GO TO 2308
C   IF NO PARAM NUM IS GIVEN, ALL PARAMS MUST BE TYPED.
C   INSERT MAY INCLUDE 10 CHARS(P3-P30),
C   P2, A # ONLY.  IF MORE THAN 1 PARAM IS TO BE EDITED AND
C   P2 IS ONE OF THEM, FIRST EDIT P2 TO DESIRED VALUE,
C   CHANGE P2 TO MINUS = THEN INSERT ENTIRE NOTE TO PLAY
C   JUST AFTER ORIGINAL NOTE(WHICH WILL BE A REST).
C   BX=INST N. Y=NOTE N. Z=PARAM N. 
1106	KTMP=1
	TP=60.
	IAMP=0
	BW=BY
	ITMP=-1
	ISUB=5
	JA=-1
	GO TO 2016
3019	V(I)=990000.00
	V(I+1)=4.
	V(I+2)=VX1
	V(I+3)=VX2/TP
	V(I+4)=VX3/TP
	I=I+5
	BY=BW
C  SEPT 18, 70
	IF(VX1.EQ.0)GO TO 2308
	BW=BW+VX1
	V(I)=-9900.-BW
	I=I+1
	CALL BGSORT(BW)
9003	IF(IAMP)GO TO 4003
2016	VX3=0
	VX2=0
	GO TO 1299
5	IF(VX2.NE.0)GO TO 105
C  'TEMPO/120;'  OR  'TEMPO/1.5 72;'  IS OK.
	VX2=VX1
	VX1=0
105	IF(VX3.EQ.0)VX3=VX2
	IF(VX2.LT.11.)TP=1.
	IF(J.EQ.ITMPO)GO TO 3019
  	PCH(1,KTMP)=VX1
	PCH(2,KTMP)=VX2
	PCH(3,KTMP)=VX3
C   PCH(1)=TIME  (2)=MM1  (3)=MM2
	KTMP=KTMP+1
	IF(IAMP.EQ.0)GO TO 2016
4003	VX1=0
	IAMP=0
	VX2=VX3
	IF(J.EQ.ITMPO)GO TO 3019
	PCH(1,KTMP)=0
	PCH(2,KTMP)=VX2
	PCH(3,KTMP)=VX2
C   MM CAN BE FROM 11 UP  TEMPO FACTOR FROM 10 DOWN.  
C   UP TO 30 TEMPO CHANGES MAY BE MADE.   

1016      IA=I    
      IZ=1  
3100	V(I-2)=CODE+DF
      ISUB=3     
5016	IF(IAMP.GE.0)GO TO 1299
117	IF(IZ-2)3013,9004,9004
103	K=INP(ML)
	IF(K.EQ.ITT)GO TO 1106
	IF(K.EQ.KSLA)GO TO 1014
	IF(K.EQ.ISEMI)GO TO 1014
CZZZZZZZZZZZZ  CC  ZZZZZZZZZZZZ
	IF(K.NE.IBLA) GO TO 1899
	ML=ML+1
	GO TO 103
3      IF(VX1.EQ.-99.)GO TO 4022
	IF(CODE.EQ.-22.)GO TO 2017
  	IF(CODE.LT.-23)GO TO 17
	IF(IZ/2*2.EQ.IZ)GO TO 17
C    CHECKS PAIRS OF NUMBERS FOR 'RTAP'
2017	IF(VX1.EQ.10000.)GO TO 17
      VX1=4./VX1
	IF(JJ.NE.1)GO TO 2014
	V(I)=VX1
	GO TO 114

1217	IF(VX1.EQ.10000.)GO TO 114
C    FOR "FINE" IN LIST
      V(I+1)=VX2
      IF(CODE.EQ.-36.)CALL RANR(V,I)
2217	I=I+1
C  SETS UP STRING OF RAND SELECTIONS
	GO TO 114
3217	V(I)=V(I-2)
	V(I+1)=RB
C  FOR SLASH REPTS OF RAND SELEC UNITS. ("REP" CAN'T BE USED!)
	GO TO 2217
C******** PUT IN ERROR TRAP FOR "REP" ETC. ******

2014	DO 9006 L=2,JJ
	IF(VX(L).EQ.0)GO TO 17
9006	VX1=4./VX(L)+VX1
	JJ=1
17	V(I)=VX1
	IF(CODE.EQ.-46.)GO TO 1217
	IF(CODE.EQ.-36.)GO TO 1217
	IF(CODE.NE.-35)GO TO 972
	IF(VX1.GT.15)CALL ERR(4)
C  FINDS F NUM.>15!
C  JUMP IF STRING OF RAND SELECS.
972	IF(JJ.EQ.1)GO TO 114
	L=VX(JJ)-1
	X=V(I)
	NL=I+1
	I=L+I
	DO 1017 K=NL,I
1017	V(K)=X
C   ADDS UP TOTAL   OF NOTES IN SEQ.
	IZ=IZ+L
	GO TO 114
1014	IF(CODE.EQ.-46.)GO TO 3217
	IF(CODE.EQ.-36.)GO TO 3217
	V(I)=RB
C   RB SAVES IT FOR SLASH REPEAT
114      RB=V(I)     
      I=I+1 
      IZ=IZ+1     
      GO TO 5016    
4022      JC=VX2+.3
      JD=VX3-.5
	IF(JJ.EQ.2)JD=1
C********* MAY 19,71   ----MANY LINES ABOVE.
      IZ=IZ+JC*JD 
C   JC=HOW MANY TIMES,  JD=HOW MANY NOTES 
      DO 1005 K=1,JD    
       NL=I+JC-1  
      DO 2005 L=I,NL    
2005  V(L)=V(L-JC)
1005      I=I+JC  
	RB=V(NL)
C  RB SAVES DATA FOR SLASH REPEAT FEATURE.
      GO TO 5016  

9004	IF(ITMP.EQ.0)GO TO 3013
	IZ=IZ-1
C***** JAN. 1974
      KA=1  
      IC=1  
      K=0   
	J=1
      Z=0   
      RC=0  
9007	Y=PCH(3,IC)/TP
	X=PCH(2,IC)/TP
      Z=PCH(1,IC) 
	CALL SQYY(YY,X,Y,Z)
	XT(1)=X
      PR=RA 
C75      RD=1  
C75      RB=0  
      ZZ=Z  
      CALL ACCEL
      IF(K.EQ.IZ)GO TO 3013
	IF(RA.NE.10000.)GO TO 9007     
C********* MAY 13,71  OMITS REPEATED RHY. FEATURE.
3013	X=I-IJ
	V(IJ+2)=X-3.
	V(IJ)=X*ALL
	IF(CODE.NE.-35)GO TO 4773
	M=IJ+3
C   SETS NUMBERS FOR FUNCS.
	DO 313 K=M,I-1
313	IF(V(K).LT.85.)V(K)=V(K)+85.
	GO TO 4773

	END